#===----------------------------------------------------------------------===##
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
#===----------------------------------------------------------------------===##

#
# This file describes the various pre-commit CI bots used to test libc++.
#
# This file should never contain logic -- all the logic must be offloaded
# into scripts. This is critical to being able to reproduce CI issues outside
# of the CI environment, which is important for debugging.
#
# It is also worth noting that this script is split into several sections, the
# goal being to reduce the load on testers when a commit is known to fail.
#

# The Linux CI runners use the nightly ToT build provided by the Docker image.
# (Note the image isn't updated daily.) The LLVM_HEAD_VERSION contains that
# version number. The Linux CI runners for GCC use the latest stable version.
# Theses numbers are available in all runners, making it easier to update the
# version number.
env:
    LLVM_STABLE_VERSION: "16"
    LLVM_HEAD_VERSION: "17"
    GCC_STABLE_VERSION: "12"
steps:
  #
  # Light pre-commit tests for things like formatting or when people forget
  # to update generated files.
  #
  - label: "Format"
    command: "libcxx/utils/ci/run-buildbot check-format"
    artifact_paths:
      - "**/clang-format.patch"
    env:
        GIT_CLANG_FORMAT: "/usr/bin/git-clang-format-${LLVM_STABLE_VERSION} --binary clang-format-${LLVM_STABLE_VERSION}"
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Generated output"
    command: "libcxx/utils/ci/run-buildbot check-generated-output"
    artifact_paths:
      - "**/generated_output.patch"
      - "**/generated_output.status"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        CLANG_FORMAT: "/usr/bin/clang-format-${LLVM_STABLE_VERSION}"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Documentation"
    command: "libcxx/utils/ci/run-buildbot documentation"
    artifact_paths:
      - "**/test-results.xml"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  #
  # General testing with the default configuration, under all the supported
  # Standard modes, with Clang and GCC. This catches most issues upfront.
  # The goal of this step is to catch most issues while being very fast.
  #
  - wait

  - label: "GCC ${GCC_STABLE_VERSION} / C++latest"
    command: "libcxx/utils/ci/run-buildbot generic-gcc"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "gcc-${GCC_STABLE_VERSION}"
        CXX: "g++-${GCC_STABLE_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "C++2b"
    command: "libcxx/utils/ci/run-buildbot generic-cxx2b"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Modular build"
    command: "libcxx/utils/ci/run-buildbot generic-modules"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "C++11"
    command: "libcxx/utils/ci/run-buildbot generic-cxx11"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "C++03"
    command: "libcxx/utils/ci/run-buildbot generic-cxx03"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  #
  # All other supported configurations of libc++.
  #
  - wait

  - label: "C++20"
    command: "libcxx/utils/ci/run-buildbot generic-cxx20"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "C++17"
    command: "libcxx/utils/ci/run-buildbot generic-cxx17"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "C++14"
    command: "libcxx/utils/ci/run-buildbot generic-cxx14"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  # Tests with the supported compilers.
  - label: "GCC ${GCC_STABLE_VERSION} / C++11"
    command: "libcxx/utils/ci/run-buildbot generic-gcc-cxx11"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "gcc-${GCC_STABLE_VERSION}"
        CXX: "g++-${GCC_STABLE_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Clang 15"
    command: "libcxx/utils/ci/run-buildbot generic-cxx2b"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-15"
        CXX: "clang++-15"
        # TODO LLVM18: Enable clang-tidy
        # ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Clang 16"
    command: "libcxx/utils/ci/run-buildbot generic-cxx2b"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-16"
        CXX: "clang++-16"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  # Tests with the sanitizers.
  - group: "Sanitizers"
    steps:
    - label: "ASAN"
      command: "libcxx/utils/ci/run-buildbot generic-asan"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "TSAN"
      command: "libcxx/utils/ci/run-buildbot generic-tsan"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "UBSAN"
      command: "libcxx/utils/ci/run-buildbot generic-ubsan"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "MSAN"
      command: "libcxx/utils/ci/run-buildbot generic-msan"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

  # Tests with the various supported ways to build libc++.
  - label: "Bootstrapping build"
    command: "libcxx/utils/ci/run-buildbot bootstrapping-build"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
      - "**/crash_diagnostics/*"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        LLVM_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer-${LLVM_HEAD_VERSION}"
        CLANG_CRASH_DIAGNOSTICS_DIR: "crash_diagnostics"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  # Tests with various build configurations.
  - label: "Static libraries"
    command: "libcxx/utils/ci/run-buildbot generic-static"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Shared library with merged ABI and unwinder libraries"
    command: "libcxx/utils/ci/run-buildbot generic-merged"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Assertions enabled"
    command: "libcxx/utils/ci/run-buildbot generic-assertions"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Debug mode"
    command: "libcxx/utils/ci/run-buildbot generic-debug-mode"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "With LLVM's libunwind"
    command: "libcxx/utils/ci/run-buildbot generic-with_llvm_unwinder"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - label: "Modular build with Local Submodule Visibility"
    command: "libcxx/utils/ci/run-buildbot generic-modules-lsv"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  - group: "Parts disabled"
    steps:
    - label: "No threads"
      command: "libcxx/utils/ci/run-buildbot generic-no-threads"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No filesystem"
      command: "libcxx/utils/ci/run-buildbot generic-no-filesystem"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No random device"
      command: "libcxx/utils/ci/run-buildbot generic-no-random_device"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No fstream"
      command: "libcxx/utils/ci/run-buildbot generic-no-fstream"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No locale"
      command: "libcxx/utils/ci/run-buildbot generic-no-localization"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No Unicode"
      command: "libcxx/utils/ci/run-buildbot generic-no-unicode"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No wide characters"
      command: "libcxx/utils/ci/run-buildbot generic-no-wide-characters"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No experimental features"
      command: "libcxx/utils/ci/run-buildbot generic-no-experimental"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "No exceptions"
      command: "libcxx/utils/ci/run-buildbot generic-noexceptions"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang-${LLVM_HEAD_VERSION}"
          CXX: "clang++-${LLVM_HEAD_VERSION}"
          ENABLE_CLANG_TIDY: "On"
      agents:
        queue: "libcxx-builders"
        os: "linux"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

  - label: "Unstable ABI"
    command: "libcxx/utils/ci/run-buildbot generic-abi-unstable"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  # Other non-testing CI jobs
  - label: "Benchmarks"
    command: "libcxx/utils/ci/run-buildbot benchmarks"
    artifact_paths:
      - "**/test-results.xml"
      - "**/*.abilist"
    env:
        CC: "clang-${LLVM_HEAD_VERSION}"
        CXX: "clang++-${LLVM_HEAD_VERSION}"
        ENABLE_CLANG_TIDY: "On"
    agents:
      queue: "libcxx-builders"
      os: "linux"
    retry:
      automatic:
        - exit_status: -1  # Agent was lost
          limit: 2
    timeout_in_minutes: 120

  # Tests on non-Unix platforms
  - group: ":windows: Windows"
    steps:
    - label: "Clang-cl (DLL)"
      command: "bash libcxx/utils/ci/run-buildbot clang-cl-dll"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "windows"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Clang-cl (Static)"
      command: "bash libcxx/utils/ci/run-buildbot clang-cl-static"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "windows"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Clang-cl (no vcruntime exceptions)"
      command: "bash libcxx/utils/ci/run-buildbot clang-cl-no-vcruntime"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "windows"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2

    - label: "MinGW (DLL, x86_64)"
      command: "bash libcxx/utils/ci/run-buildbot mingw-dll"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "windows"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "MinGW (Static, x86_64)"
      command: "bash libcxx/utils/ci/run-buildbot mingw-static"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "windows"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "MinGW (DLL, i686)"
      command: "bash libcxx/utils/ci/run-buildbot mingw-dll-i686"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "windows"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

  - group: ":apple: Apple"
    steps:
    - label: "MacOS x86_64"
      command: "libcxx/utils/ci/run-buildbot generic-cxx20"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
        arch: "x86_64"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "MacOS arm64"
      command: "libcxx/utils/ci/run-buildbot generic-cxx20"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
        arch: "arm64"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "MacOS with Modules"
      command: "libcxx/utils/ci/run-buildbot generic-modules"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    # Build with the configuration we use to generate libc++.dylib on Apple platforms
    - label: "Apple system"
      command: "libcxx/utils/ci/run-buildbot apple-system"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
        arch: "arm64" # This can technically run on any architecture, but we have more resources on arm64 so we pin this job to arm64
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    # Test back-deployment to older Apple platforms
    - label: "Apple back-deployment macosx10.9"
      command: "libcxx/utils/ci/run-buildbot apple-system-backdeployment-10.9"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
        arch: "x86_64" # We need to use x86_64 for back-deployment CI on this target since macOS didn't support arm64 back then.
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Apple back-deployment macosx10.15"
      command: "libcxx/utils/ci/run-buildbot apple-system-backdeployment-10.15"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
        arch: "x86_64" # We need to use x86_64 for back-deployment CI on this target since macOS didn't support arm64 back then.
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Apple back-deployment macosx11.0 arm64"
      command: "libcxx/utils/ci/run-buildbot apple-system-backdeployment-11.0"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
        arch: "arm64"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Apple back-deployment with assertions enabled"
      command: "libcxx/utils/ci/run-buildbot apple-system-backdeployment-assertions-11.0"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders"
        os: "macos"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

  - group: "ARM"
    steps:
    - label: "AArch64"
      command: "libcxx/utils/ci/run-buildbot aarch64"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders-linaro-arm"
        arch: "aarch64"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "AArch64 -fno-exceptions"
      command: "libcxx/utils/ci/run-buildbot aarch64-noexceptions"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders-linaro-arm"
        arch: "aarch64"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Armv8"
      command: "libcxx/utils/ci/run-buildbot armv8"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders-linaro-arm"
        arch: "armv8l"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Armv8 -fno-exceptions"
      command: "libcxx/utils/ci/run-buildbot armv8-noexceptions"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders-linaro-arm"
        arch: "armv8l"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Armv7"
      command: "libcxx/utils/ci/run-buildbot armv7"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders-linaro-arm"
        arch: "armv8l" # Compiling for v7, running on v8 hardware
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "Armv7 -fno-exceptions"
      command: "libcxx/utils/ci/run-buildbot armv7-noexceptions"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      agents:
        queue: "libcxx-builders-linaro-arm"
        arch: "armv8l" # Compiling for v7, running on v8 hardware
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

  - group: "AIX"
    steps:
    - label: "AIX (32-bit)"
      command: "libcxx/utils/ci/run-buildbot aix"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang"
          CXX: "clang++"
          OBJECT_MODE: "32"
      agents:
          queue: libcxx-builders
          os: aix
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

    - label: "AIX (64-bit)"
      command: "libcxx/utils/ci/run-buildbot aix"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang"
          CXX: "clang++"
          OBJECT_MODE: "64"
      agents:
          queue: libcxx-builders
          os: aix
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120

  - group: "FreeBSD"
    steps:
    - label: "FreeBSD 13 amd64"
      command: "libcxx/utils/ci/run-buildbot generic-cxx2b"
      artifact_paths:
        - "**/test-results.xml"
        - "**/*.abilist"
      env:
          CC: "clang15"
          CXX: "clang++15"
      agents:
        queue: "libcxx-builders"
        os: "freebsd"
      retry:
        automatic:
          - exit_status: -1  # Agent was lost
            limit: 2
      timeout_in_minutes: 120
